package com.miage.kangourou.client.calendar;

import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.miage.kangourou.client.GetListesService;
import com.miage.kangourou.client.GetListesServiceAsync;
import com.miage.kangourou.client.beans.Enseignant;
import com.miage.kangourou.client.beans.Groupe;
import com.miage.kangourou.client.beans.Matiere;
import com.miage.kangourou.client.beans.Promo;
import com.miage.kangourou.client.beans.Salle;
import com.miage.kangourou.client.beans.Ue;

public class PopUpAdmin {

	private final GetListesServiceAsync getListesService = GWT
			.create(GetListesService.class);

	final PopupPanel popUpAdmin = new PopupPanel(true);
	final ListBox ueListBox = new ListBox();
	final ListBox promoListBox = new ListBox();

	final ListBox multiBoxmatiere = new ListBox(true);
	final ListBox multiBoxgroupe = new ListBox(true);
	final ListBox multiBoxsalles = new ListBox(true);
	final ListBox multiBoxprofesseur = new ListBox(true);

	@SuppressWarnings("deprecation")
	public PopupPanel createPopUpAdmin(final KangourouPanel context) {

		TabPanel panel = new TabPanel();
		FlowPanel flowpaneluser;
		FlowPanel flowpanelpromo;
		FlowPanel flowpanelsalles;
		FlowPanel flowpanelprofesseurs;
		FlowPanel flowpanelue;

		// configuration des onglets
		// Onglet

		flowpaneluser = new FlowPanel();
		panel.add(flowpaneluser, "Utilisateurs");
		flowpanelpromo = new FlowPanel();
		panel.add(flowpanelpromo, "Promotions");
		flowpanelue = new FlowPanel();
		panel.add(flowpanelue, "UE/Matières");
		flowpanelsalles = new FlowPanel();
		panel.add(flowpanelsalles, "Salles");
		flowpanelprofesseurs = new FlowPanel();
		panel.add(flowpanelprofesseurs, "Professeurs");

		// ******************
		// Mati�re UE
		// ******************

		VerticalPanel uematierepanel = new VerticalPanel();
		VerticalPanel uepanel = new VerticalPanel();
		VerticalPanel matierepanel = new VerticalPanel();
		uepanel.setSpacing(10);
		uepanel.add(new Label("UE :"));
		uepanel.add(ueListBox);

		matierepanel.setSpacing(10);
		matierepanel.add(new Label("Mati�res :"));
		matierepanel.add(multiBoxmatiere);

		uematierepanel.add(uepanel);

		uematierepanel.add(matierepanel);

		final AsyncCallback<List<Matiere>> Cmatiere = new AsyncCallback<List<Matiere>>() {

			public void onFailure(Throwable caught) {
				Window.alert("Erreur lors de l'appel serveur "
						+ caught.getMessage());
			}

			public void onSuccess(List<Matiere> result) {
				multiBoxmatiere.clear();
				for (Matiere matiere : result) {
					multiBoxmatiere.addItem(matiere.getIntitule(), String
							.valueOf(matiere.getId_matiere()));
				}

				// checkBoxState(6);

			}
		};
		final AsyncCallback<List<Ue>> listeUes = new AsyncCallback<List<Ue>>() {

			public void onFailure(Throwable caught) {
				Window.alert("Erreur lors de l'appel serveur "
						+ caught.getMessage());

			}

			public void onSuccess(List<Ue> result) {

				for (Ue ue : result) {
					ueListBox.addItem(ue.getIntitule(), String.valueOf(ue
							.getId_ue()));
				}
				getListesService.getMatiereListFromUe(Integer
						.parseInt(ueListBox.getValue(ueListBox
								.getSelectedIndex())), Cmatiere);
				// checkBoxState(5);
			}
		};
		getListesService.getUEList(listeUes);

		// Add a list box with multiple selection enabled

		multiBoxmatiere.ensureDebugId("cwListBox-multiBox");
		multiBoxmatiere.setWidth("30em");
		multiBoxmatiere.setVisibleItemCount(10);

		ueListBox.addChangeHandler(new ChangeHandler() {
			public void onChange(ChangeEvent event) {
				getListesService.getMatiereListFromUe(Integer
						.parseInt(ueListBox.getValue(ueListBox
								.getSelectedIndex())), Cmatiere);
			}
		});
		// gestion evenement ue
		HorizontalPanel ueboutonspanel = new HorizontalPanel();
		TextBox ueBox = new TextBox();
		ueBox.ensureDebugId("cwBasicText-textbox");
		Button modifueButton = new Button("Modifier", new ClickHandler() {
			public void onClick(ClickEvent event) {
			}
		});
		Button supprimerueButton = new Button("Supprimer", new ClickHandler() {
			public void onClick(ClickEvent event) {
			}
		});
		Button AjouterButton = new Button("Ajouter", new ClickHandler() {
			public void onClick(ClickEvent event) {
			}
		});
		ueboutonspanel.add(ueBox);
		ueboutonspanel.add(AjouterButton);
		ueboutonspanel.add(modifueButton);
		ueboutonspanel.add(supprimerueButton);

		uepanel.add(ueboutonspanel);
		// gestion evenement matiere
		HorizontalPanel matiereboutonspanel = new HorizontalPanel();
		TextBox matiereBox = new TextBox();
		ueBox.ensureDebugId("cwBasicText-textbox");
		Button modifiematiereButton = new Button("Modifier",
				new ClickHandler() {
					public void onClick(ClickEvent event) {
					}
				});
		Button supprimermatiereButton = new Button("Supprimer",
				new ClickHandler() {
					public void onClick(ClickEvent event) {
					}
				});
		Button AjoutermatiereButton = new Button("Ajouter", new ClickHandler() {
			public void onClick(ClickEvent event) {
			}
		});
		matiereboutonspanel.add(matiereBox);
		matiereboutonspanel.add(AjoutermatiereButton);
		matiereboutonspanel.add(modifiematiereButton);
		matiereboutonspanel.add(supprimermatiereButton);

		ueboutonspanel.setSpacing(4);
		matiereboutonspanel.setSpacing(4);

		uepanel.add(ueboutonspanel);
		matierepanel.add(matiereboutonspanel);

		flowpanelue.add(uematierepanel);

		// ******************
		// promos groupes
		// ******************

		VerticalPanel promogroupepanel = new VerticalPanel();
		VerticalPanel promopanel = new VerticalPanel();
		VerticalPanel groupepanel = new VerticalPanel();
		promopanel.setSpacing(10);
		promopanel.add(new Label("Promotions :"));
		promopanel.add(promoListBox);

		groupepanel.setSpacing(10);
		groupepanel.add(new Label("Groupes :"));
		groupepanel.add(multiBoxgroupe);

		promogroupepanel.add(promopanel);

		promogroupepanel.add(groupepanel);

		final AsyncCallback<List<Groupe>> Cgroupe = new AsyncCallback<List<Groupe>>() {

			public void onFailure(Throwable caught) {
				Window.alert("Erreur lors de l'appel serveur "
						+ caught.getMessage());

			}

			public void onSuccess(List<Groupe> result) {
				multiBoxgroupe.clear();
				for (Groupe groupe : result) {
					multiBoxgroupe.addItem(groupe.getIntitule(), String
							.valueOf(groupe.getId_groupe()));
				}

			}
		};

		final AsyncCallback<List<Promo>> listePromos = new AsyncCallback<List<Promo>>() {

			public void onFailure(Throwable caught) {
				Window.alert("Erreur lors de l'appel serveur "
						+ caught.getMessage());
			}

			public void onSuccess(List<Promo> result) {

				for (Promo promo : result) {

					promoListBox.addItem(promo.getIntitule(), String
							.valueOf(promo.getId_promo()));
				}
				getListesService.getGroupeListFromUe(Integer
						.parseInt(promoListBox.getValue(promoListBox
								.getSelectedIndex())), Cgroupe);
				// checkBoxState(2);
			}
		};
		getListesService.getPromoList(listePromos);

		promoListBox.addChangeHandler(new ChangeHandler() {
			public void onChange(ChangeEvent event) {

				getListesService.getGroupeListFromUe(Integer
						.parseInt(promoListBox.getValue(promoListBox
								.getSelectedIndex())), Cgroupe);

			}
		});

		// Add a list box with multiple selection enabled

		multiBoxgroupe.ensureDebugId("cwListBox-multiBox");
		multiBoxgroupe.setWidth("30em");
		multiBoxgroupe.setVisibleItemCount(10);

		// gestion evenement promo
		HorizontalPanel promoboutonspanel = new HorizontalPanel();
		TextBox promoBox = new TextBox();
		ueBox.ensureDebugId("cwBasicText-textbox");
		Button modifpromoButton = new Button("Modifier", new ClickHandler() {
			public void onClick(ClickEvent event) {
			}
		});
		Button supprimerpromoButton = new Button("Supprimer",
				new ClickHandler() {
					public void onClick(ClickEvent event) {
					}
				});
		Button AjouterpromoButton = new Button("Ajouter", new ClickHandler() {
			public void onClick(ClickEvent event) {
			}
		});
		promoboutonspanel.add(promoBox);
		promoboutonspanel.add(AjouterpromoButton);
		promoboutonspanel.add(modifpromoButton);
		promoboutonspanel.add(supprimerpromoButton);

		promopanel.add(promoboutonspanel);
		// gestion evenement groupe
		HorizontalPanel groupeboutonspanel = new HorizontalPanel();
		TextBox groupeBox = new TextBox();
		ueBox.ensureDebugId("cwBasicText-textbox");
		Button modifiegroupeButton = new Button("Modifier", new ClickHandler() {
			public void onClick(ClickEvent event) {
			}
		});
		Button supprimergroupeButton = new Button("Supprimer",
				new ClickHandler() {
					public void onClick(ClickEvent event) {
					}
				});
		Button AjoutergroupeButton = new Button("Ajouter", new ClickHandler() {
			public void onClick(ClickEvent event) {
			}
		});
		groupeboutonspanel.add(groupeBox);
		groupeboutonspanel.add(AjoutergroupeButton);
		groupeboutonspanel.add(modifiegroupeButton);
		groupeboutonspanel.add(supprimergroupeButton);

		promoboutonspanel.setSpacing(4);
		groupeboutonspanel.setSpacing(4);

		promopanel.add(promoboutonspanel);
		groupepanel.add(groupeboutonspanel);

		flowpanelpromo.add(promogroupepanel);

		//

		// ******************
		// salles
		// ******************

		VerticalPanel sallespanel = new VerticalPanel();

		sallespanel.add(multiBoxsalles);
		final AsyncCallback<List<Salle>> listeSalle = new AsyncCallback<List<Salle>>() {

			public void onFailure(Throwable caught) {
				Window.alert("Erreur lors de l'appel serveur "
						+ caught.getMessage());

			}

			public void onSuccess(List<Salle> result) {

				for (Salle salle : result) {

					multiBoxsalles.addItem(salle.getIntitule(), String
							.valueOf(salle.getId_salle()));
				}

				// checkBoxState(4);
			}
		};
		getListesService.getSalleList(listeSalle);

		// gestion salles
		HorizontalPanel sallesBouttonpanel = new HorizontalPanel();
		TextBox sallesBox = new TextBox();
		sallesBox.ensureDebugId("cwBasicText-textbox");
		Button modifsallesButton = new Button("Modifier", new ClickHandler() {
			public void onClick(ClickEvent event) {
			}
		});
		Button supprimersallesButton = new Button("Supprimer",
				new ClickHandler() {
					public void onClick(ClickEvent event) {
					}
				});
		Button AjoutersallesButton = new Button("Ajouter", new ClickHandler() {
			public void onClick(ClickEvent event) {
			}
		});
		sallesBouttonpanel.add(sallesBox);
		sallesBouttonpanel.add(AjoutersallesButton);
		sallesBouttonpanel.add(modifsallesButton);
		sallesBouttonpanel.add(supprimersallesButton);

		sallesBouttonpanel.setSpacing(4);
		sallespanel.setSpacing(4);

		sallespanel.add(sallesBouttonpanel);

		flowpanelsalles.add(sallespanel);

		// ******************
		// professeurs
		// ******************

		VerticalPanel professeurpanel = new VerticalPanel();

		professeurpanel.add(multiBoxprofesseur);

		final AsyncCallback<List<Enseignant>> listeProfs = new AsyncCallback<List<Enseignant>>() {

			public void onFailure(Throwable caught) {
				Window.alert("Erreur lors de l'appel serveur "
						+ caught.getMessage());
			}

			public void onSuccess(List<Enseignant> result) {

				for (Enseignant enseignant : result) {

					multiBoxprofesseur.addItem(enseignant.getNom(), String
							.valueOf(enseignant.getId_enseignant()));
				}

				// checkBoxState(1);
			}
		};
		getListesService.getEnseignantList(listeProfs);

		// gestion professeurs
		HorizontalPanel professeurBouttonpanel = new HorizontalPanel();
		TextBox professeurBox = new TextBox();
		professeurBox.ensureDebugId("cwBasicText-textbox");
		Button modifprofesseurButton = new Button("Modifier",
				new ClickHandler() {
					public void onClick(ClickEvent event) {
					}
				});
		Button supprimerprofesseurButton = new Button("Supprimer",
				new ClickHandler() {
					public void onClick(ClickEvent event) {
					}
				});
		Button AjouterprofesseurButton = new Button("Ajouter",
				new ClickHandler() {
					public void onClick(ClickEvent event) {
					}
				});
		professeurBouttonpanel.add(professeurBox);
		professeurBouttonpanel.add(AjouterprofesseurButton);
		professeurBouttonpanel.add(modifprofesseurButton);
		professeurBouttonpanel.add(supprimerprofesseurButton);

		professeurBouttonpanel.setSpacing(4);
		professeurpanel.setSpacing(4);

		professeurpanel.add(professeurBouttonpanel);

		flowpanelprofesseurs.add(professeurpanel);

		// ************************
		// configuration de la popup
		// **********************

		panel.selectTab(0);
		panel.setSize("600px", "350px");
		panel.addStyleName("table-center");

		popUpAdmin.add(panel);
		popUpAdmin.center();
		return popUpAdmin;

	}
}
